#include "RegistroIndiceMemoria.h"
#include <iostream>

// constructor que recibe termino y documento
RegistroIndiceMemoria::RegistroIndiceMemoria(char * termino, int id_documento) {
	
	RegistroDocFrec *aux_reg = NULL;
	this->ptr_docs = new list<RegistroDistancias *>();
	this->termino = new char[strlen(termino) + 1];
	strcpy(this->termino, termino);
	this->frecuencia_absoluta = 1;
	aux_reg = new RegistroDocFrec(id_documento);
	ptr_docs->push_back(aux_reg);
}

// constructor vacio
RegistroIndiceMemoria::RegistroIndiceMemoria() {
	this->termino = NULL;
}

// destructor
RegistroIndiceMemoria::~RegistroIndiceMemoria()
{
	list<RegistroDistancias *>::iterator it = ptr_docs->begin(); // p al comienzo de la lista
	while (it != ptr_docs->end()) {
		delete (*it);
		it++;
	}
	
	delete ptr_docs;
	delete [] this->termino;
}

void RegistroIndiceMemoria::actualizarRegistro(int id_documento) {
	
	bool encontrado = false;
	RegistroDocFrec *aux_reg = NULL;
	
	list<RegistroDistancias *>::iterator it = ptr_docs->begin(); // p al comienzo de la lista
	while (it != ptr_docs->end() && !encontrado) {
		if ((*it)->getDocumento() == id_documento)
			encontrado = true;
		else
			it++;
	}
	
	if (encontrado)
		((RegistroDocFrec *)(*it))->incrementarFrecuencia();
	else {
		aux_reg = new RegistroDocFrec(id_documento);
		ptr_docs->push_back(aux_reg);
	}
}

void RegistroIndiceMemoria::incrementarFrecuenciaAbsoluta(){
	this->frecuencia_absoluta++;
}

char * RegistroIndiceMemoria::getTermino() {
	return this->termino;
}

void RegistroIndiceMemoria::setTermino(char * termino) {
	delete [] this->termino;
	this->termino = new char[strlen(termino) + 1];
	strcpy(this->termino, termino);
	this->termino[strlen(this->termino)] = '\0';
}	

int RegistroIndiceMemoria::getFrecuenciaAbsoluta() {
	return this->frecuencia_absoluta;
}

void RegistroIndiceMemoria::setFrecuenciaAbsoluta(int frec_abs) {
	this->frecuencia_absoluta = frec_abs;
}

list<RegistroDistancias *> * RegistroIndiceMemoria::getListaDocumentosDistancias() {
	return this->ptr_docs;
}

void RegistroIndiceMemoria::setListaDocumentosDistancias(list<RegistroDistancias *> * lista) {
	this->ptr_docs = lista;
}

